//import java.util.*;
//
//public class LRAnalysis {
//    private static final Map<String, Integer> action = new HashMap<>();
//    private static final Map<String, Integer> go = new HashMap<>();
//    private static final List<String> inputSequence = new ArrayList<>();
//
//    public static void main(String[] args) {
//        // 初始化action和go表
//        initActionAndgo();
//
//        // 初始化输入序列
//        inputSequence.add("id");
//        inputSequence.add("-");
//        inputSequence.add("-");
//        inputSequence.add("id");
//        inputSequence.add("*");
//        inputSequence.add("id");
//
//        // 执行LR分析
//        performLRAnalysis();
//    }
//
//    private static void initActionAndgo() {
//        // 在这里填充action和go表
//        // 例如：action.put("0,id", 1);
//        //       go.put("0,E", 2);
//        action.put("0,id", 1);
//        go.put("0,E", 2);
//    }
//
//    private static void performLRAnalysis() {
//        int ip = 0; // 指向输入序列的第一个终结符
//        int top = 0; // 栈顶状态
//
//        while (true) {
//            String state = String.valueOf(top);
//            String symbol = inputSequence.get(ip);
//
//            switch (action.getOrDefault(state + "," + symbol, -1)) {
//                case 1: // shift
//                    System.out.println("shift " + symbol);
//                    top = push(symbol);
//                    push(state);
//                    ip++;
//                    break;
//                case 2: // reduced by A->β
//                    pop(2 * getProductionLength(symbol));
//                    top = pop();
//                    push(symbol);
//                    push(go.getOrDefault(top + "," + symbol, -1));
//                    System.out.println("reduced by " + symbol + "->" + getProductionBody(symbol));
//                    break;
//                case 3: // accept
//                    System.out.println("accept");
//                    return;
//                default: // error
//                    System.out.println("error");
//                    return;
//            }
//        }
//    }
//
//    private static int push(String symbol) {
//        // 在这里实现push操作，返回新的栈顶状态
//        return 0;
//    }
//
//    private static int pop() {
//        // 在这里实现pop操作，返回新的栈顶状态
//        return 0;
//    }
//
//    private static int getProductionLength(String symbol) {
//        // 在这里实现获取产生式长度的操作
//        // 示例文法：E -> E - T | T
//        if (symbol.equals("E")) {
//            return 3;
//        } else if (symbol.equals("T")) {
//            return 1;
//        } else {
//            return 0;
//        }
//    }
//
//    private static String getProductionBody(String symbol) {
//        // 在这里实现获取产生式体的操作
//        // 示例文法：E -> E - T | T
//        if (symbol.equals("E")) {
//            return "E - T";
//        } else if (symbol.equals("T")) {
//            return "T";
//        } else {
//            return "";
//        }
//    }
//}
